Skip to content

Voeg regel toe voor error structuur bij Bad Requests#310

Open
TimvdLippe wants to merge 5 commits intodevelopfrom
bad-request-errors
Open

Voeg regel toe voor error structuur bij Bad Requests#310
TimvdLippe wants to merge 5 commits intodevelopfrom
bad-request-errors

Conversation

@TimvdLippe
Copy link
Copy Markdown
Contributor

Hier was initieel geen consensus voor bij de behandeling van het hoofdstuk "Error Handling".

@TimvdLippe TimvdLippe requested review from joostfarla and strijm March 5, 2026 10:02
@github-actions github-actions bot added Status: In bewerking Het voorstel is in bewerking bij de beheerorganisatie. Overleg: TO-API Te agenderen voor het Technisch Overleg API labels Mar 5, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2026

@TimvdLippe
Copy link
Copy Markdown
Contributor Author

Deze wijziging is gedeeltelijk goedgekeurd op het TO API van 2026-03-03. Alle regels behalve /core/error-handling/bad-request zijn goedgekeurd. Voor deze laatste regel wordt de discussie verder gevoerd met inachtneming van de input van Kadaster over hun huidige omgang van error handling (CC @strijm). Hier zal er expliciet worden gekeken naar de huidige oplossing bij Haal Centraal en worden gekeken naar:

  1. Het mogelijk hernoemen van errors naar invalid-params
  2. Analyseren van impact van name vervangen door location
  3. Kijken hoe de gedetailleerde specificatie van error handling in .feature bestanden bij Kadaster te vatten is in de structuur

#251 (comment)

Het mogelijk hernoemen van errors naar invalid-params

Dit lijkt me niet wenselijk, omdat je een JSON property niet kunt beschouwen als een "param" (in tegenstelling tot query en header parameters). Hier zit dus een semantische mismatch. Om deze reden was gekozen voor de algemenere term errors, in lijn met de voorbeelden in de RFC en bijv ook in dit blog.

Analyseren van impact van name vervangen door location

Het gebruik van name impliceert een enkelvoudige naam van een top-level property (in het geval van een body value). Dat lijkt ook de manier waarop het in de genoemde API's wordt gebruikt. Je wil echter ook errors kunnen rapporteren voor dieper gelegen waardes (zoals nested object properties of array items). Vandaar dat er gekozen is voor de bredere term location die voor body values een locator van de value verwacht (JSON Pointer voor JSON, XPath voor XML). Voor parameters is de waarde van location enkel de naam.

@joostfarla in #251 (comment)

Mogelijkheden voor naamgeving van het JSON veld:

  1. "errors"
  2. "invalid-params"
  3. "invalid-input"

@TimvdLippe TimvdLippe removed the request for review from strijm March 23, 2026 15:15
@TimvdLippe
Copy link
Copy Markdown
Contributor Author

@kad-sprenr Dit is de PR waar Mark en ik het over hadden. Ben jij in de gelegenheid hier naar te kijken en de conversatie voort te brengen met de andere API experts?

@kad-sprenr
Copy link
Copy Markdown

@TimvdLippe Wij zijn het op zich eens om 'errors' te gebruiken omdat je daarmee de voorbeelden in RFC9457 volgt en dat lijkt momenteel de standaard te zijn voor het uitbreiden van problem+json. Wat @strijm en ik het liefste zien is dat die RFC volledig gevolgd wordt en niet gedeeltelijk, dus dat ook 'name' hernoemd wordt naar 'pointer', en niet naar iets dat afwijkt van de RFC (zoals location).

@TimvdLippe
Copy link
Copy Markdown
Contributor Author

Vandaag offline besproken. Het plan is om de examples/ zoals ze hier in de repository staan te updaten met fouten en dan kijken of het haalbaar is om de voorgestelde structuur te implementeren. Vermoeden is dat frameworks dit niet out-of-the-box doen, maar dat het wel mogelijk is om dit soort structuren terug te geven. Die aanname moeten we dus verifiëren. @kad-sprenr gaat dat ook nog doen voor Spring Boot (die staat niet bij ons in de repository).

Hier was initieel geen consensus voor bij de behandeling van het
hoofdstuk "Error Handling".
Comment thread examples/quarkus/src/main/java/org/acme/BadRequestProblem.java
try {
return new ObjectMapper().readValue(entityStream, PostRequestyBody.class);
} catch (IOException e) {
throw new BadRequestProblem(
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kad-sprenr Is dit ook een gangbare oplossing voor Spring? Ik ben niet up-to-date met hoe moderne projecten met Jackson JSON omzetten naar Java classes. Het lijkt er in ieder geval op dat hiermee makkelijk 1 methode kan worden gebruikt om een generieke parsing error om te zetten in een BadRequestProblem die het juiste application/problem+json response oplevert

}

@Test
void testReturnsBothBodySchemaIssuesAndQueryParamFailures() {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In deze test tonen we ook aan dat we voldoen aan /core/error-handling/all-errors waarbij alle fouten in 1 keer worden teruggeven, voor zowel body als query input. Dat kan helaas niet als de parsing van de body faalt, maar wel voor schema validatie. Dat is in lijn met de gedachte achter die regel.

public String detail;

@Schema(nullable = true, description = "A locator for the offending value")
@JsonInclude(value = JsonInclude.Include.NON_NULL)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zo zorg je ervoor dat als er geen location is, dat als je null hierin stopt hij niet "location": null in de JSON response zet, maar hem gewoon weglaat.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Overleg: TO-API Te agenderen voor het Technisch Overleg API Status: In bewerking Het voorstel is in bewerking bij de beheerorganisatie.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants